#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <cassert>

using namespace std;

int main() {
    int pipefd[2];
    int ret = pipe(pipefd);
    assert(ret == 0);

    pid_t pid = fork();

    if (pid == 0) {
        // 子进程：不读，只是阻塞在死循环中
        close(pipefd[1]); // 不需要写端
        while (true) {
            // 子进程什么都不做，不读取数据
        }
    } else {
        // 父进程：不断写入数据，直到管道写满被阻塞
        close(pipefd[0]); // 不需要读端

        int cnt = 1;
        char ch = 'x';
        while (true) {
            ssize_t w = write(pipefd[1], &ch, 1); // 每次写1字节
            if (w == -1) {
                perror("write");
                break;
            }
            cout << "已写入 " << cnt++ << " 字节的数据" << endl;
            usleep(1000); // 微小延迟可视化阻塞前行为
        }

        close(pipefd[1]);
        waitpid(pid, nullptr, 0);
    }

    return 0;
}

